<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //node第二天作业
      // 1. 整理以下数组方法，写出数组方法的解释，并使用

      // 1. push
      // 参数：接收一个或多个参数
      // 作用：向指定数组尾部添加元素
      // 返回值：新数组的长度
      // 例如：
      const arr = ['a', 'b', 'c']
      arr.push('d')
      console.log(arr) // ['a', 'b', 'c', 'd']

      const res = arr.push('e', 'f')
      console.log(arr) // ['a', 'b', 'c', 'd', 'e', f]
      console.log(res) // 6

      //2.pop()
      // 参数：无
      // 作用：删除数组的最后一位,会改变原来的数组.
      // 返回值：返回删除的数据，
      const arr1 = [2, 4, 6, 8, 10]
      const res1 = arr1.pop()
      console.log(res1) //10

      //3.unshift()
      // 参数：接收一个或多个参数
      // 作用：在数组第一位添加一个或多个元素，改变原数组
      // 返回值：并返回新数组的长度。
      const arr2 = [2, 4, 6, 8, 10]
      res2 = arr2.unshift(0, 1)
      console.log(arr2) //[0,1,2,4,6,8,10]
      console.log(res) //返回值长度：6

      //4.shift()
      // 参数：无
      // 作用：删除数组的第一位数据，会改变原来的数组
      // 返回值：返回被删除的数据
      const arr4 = [2, 4, 6, 8, 10]
      res4 = arr4.shift()
      console.log(arr4) //4,6,8,10
      console.log(res4) //返回值：2

      //5.sort()
      // 参数：无
      // 作用：方法用于对数组的元素进行排序。(默认排序顺序是根据字符串Unicode码点)。
      // 返回值：返回数组
      const arr5 = [2, 4, 6, 8, 10]
      arr5.sort()
      console.log(arr5) //10 ,2, 4, 6, 8,

      //6.reverse()
      // 参数：无
      // 作用：反转数组中的元素
      // 返回值：返回反转后数组
      const arr6 = [2, 4, 6, 'c','b','a']
      arr6.reverse()
      console.log(arr6);//['a', 'b', 'c', 6, 4, 2]


      //7:splice()
      // 参数：（index，howmany，item1, …, itemX）
      //(index:必需。整数，规定添加/删除项目的位置（元素下标），使用负数可从数组结尾处规定位置。)
      //(howmany:必需。要删除的项目数量。如果设置为 0，则不会删除项目。)
      //(item1, …, itemX:可选。向数组添加的新项目。)	
      // 作用：在指定位置删除指定个数元素再增加任意个数元素（实现数组任意位置的增删改)
      // 返回值：返回删除的数据所组成的数组
      const arr7 = ['a', 'b', 'c', 'd']
      arr7.splice(1, 1, 'ttt')
      console.log(arr7) //['a','ttt','c','d']

      
      //8:reduce()
      // 参数：prev 初始值 (类似求和是sum=0) 可以设置初始值(参数),如果不设置初始值默认是数组中的第一个元素,遍历时从第二个元素开始遍历
           /* item 每次循环的当前元素。
              index 每次循环的当前下标
              array 原数组 */
      /* 作用：(归并)遍历数组, 每次循环时执行传入的回调函数,回调函数会返回一个值,
              将该值作为初始值prev,传入到下一次函数中 */
      //返回值：无
      const arr8 = [2, 3, 4, 5];
      const sum = arr8.reduce(function (prev, item, index, array) {
      // console.log(prev, item, index, array);
      return prev + item;
    });
    console.log(arr8, sum);//[2, 3, 4, 5]   14

    //9.filter()
    // 参数：item, index
    // 作用：(迭代) 遍历数组, 每次循环时执行传入的回调函数,回调函数返回一个条件,把满足条件的元素筛选出来放到新数组中
    // 返回值：满足条件的元素组成的新数组	
      const arr9 = [10, 20, 30]
      const newArr = arr9.filter( (item, index)=>item>=20)
      console.log(newArr)//20 30

    //10.some()
    // 参数：item,index,array
    // 作用：(迭代) 判断数组中是否存在,满足某个条件的元素,
    // 返回值：只要有一个元素满足条件就返回true,都不满足返回false
    const arr10 = [10, 20, 30]
    const result= arr10.some((item,index,array)=>{
      return item>=20
    })
    console.log(result);//true

    //11.every()
    // 参数：item,index,array
    // 作用：(迭代) 判断数组中所有的元素是否满足某个条件
    // 返回值：全都满足返回true 只要有一个不满足 返回false
    const arr11 = [10, 20, 30]
    const result1 = arr11.every((item,index,array)=>{
      return item>=20
    })
    console.log(result1);//false


    //12.map()
    // 参数：item,index,array
    // 作用：按照原始数组元素顺序依次处理元素。。
    // 返回值：返回一个新数组，数组中的元素为原始数组元素调用函数处理的后值
    const arr12 = [1, 4, 9, 16]
    const newarr = arr12.map((x) => x * 2)
    console.log(newarr)

    </script>
  </body>
</html>
